Dominar el ciclo de vida de un objeto C++ es tener control sobre los mecanismos mismos de existencia dentro del montón y pila. El control de copia define cómo una clase gestiona su ciclo de vida mediante dos operaciones: el constructor de copia y el operador de asignación por copia.
1. Inicialización frente a Asignación
Inicialización directa (por ejemplo, string puntos(10, '.')) invoca directamente un constructor. Sin embargo, inicialización por copia (string s2 = puntos) depende del constructor de copia. A diferencia de la inicialización, asignación (trans = acum) sobrescribe un objeto existente usando operador=. Una restricción crítica: el parámetro del constructor de copia debe ser una referencia (const Foo&); de lo contrario, pasar un argumento por valor desencadenaría un bucle recursivo infinito de llamadas de copia.
2. El Papel de la Síntesis
Si no defines estos miembros, el compilador proporciona versiones sintetizadas que realizan copias miembro a miembro. Ten cuidado: aunque son suficientes para tipos simples, a menudo fallan en clases que gestionan memoria dinámica, provocando punteros colgantes o liberaciones dobles.